import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
import seaborn as sns
plt.rcParams['font.sans-serif'] = ['SimHei']  # 黑体

def psm_analysis(data, product_name):
    """
    执行PSM分析并生成定价建议表
    :param data: 包含价格接受度问卷结果的DataFrame
    :param product_name: 产品名称(如"月服药盒套装")
    :return: 定价建议表和可视化图表
    """
    # 1. 计算四个关键价格点
    price_points = {
        '太便宜点(PMC)': data['too_cheap'].mean(),
        '便宜点(PME)': data['cheap'].mean(),
        '昂贵点(PMO)': data['expensive'].mean(),
        '太昂贵点(PMM)': data['too_expensive'].mean()
    }

    # 2. 计算最优价格区间
    acceptable_range = (price_points['便宜点(PME)'], price_points['昂贵点(PMO)'])
    optimal_price = np.mean([price_points['便宜点(PME)'], price_points['昂贵点(PMO)']])

    # 3. 生成定价建议表
    suggestion_table = pd.DataFrame({
        '指标': ['价格敏感区间', '最优建议价', '可接受范围'],
        '值': [
            f"{price_points['太便宜点(PMC)']:.2f}-{price_points['太昂贵点(PMM)']:.2f}",
            f"{optimal_price:.2f}",
            f"{acceptable_range[0]:.2f}-{acceptable_range[1]:.2f}"
        ],
        '说明': [
            '从怀疑质量到拒绝购买的全区间',
            '收益最大化的平衡点价格',
            '大多数消费者认为合理的价格带'
        ]
    })

    # 4. 价格分布可视化
    plt.figure(figsize=(10, 6))
    for col in ['too_cheap', 'cheap', 'expensive', 'too_expensive']:
        sns.kdeplot(data[col], label=col.replace('_', ' '))
    plt.axvline(optimal_price, color='red', linestyle='--', label=f'Optimal Price ({optimal_price:.2f})')
    plt.title(f'{product_name} - PSM模型价格敏感度分析')
    plt.xlabel('价格(元)')
    plt.ylabel('密度')
    plt.legend()
    plt.show()

    return suggestion_table


# 示例数据加载 (实际应从问卷系统导入)
sample_data = pd.DataFrame({
    'respondent_id': range(1, 101),
    'too_cheap': np.random.normal(30, 5, 100),
    'cheap': np.random.normal(50, 5, 100),
    'expensive': np.random.normal(80, 5, 100),
    'too_expensive': np.random.normal(100, 5, 100)
})

# 执行分析
psm_table = psm_analysis(sample_data, "月服药盒套装")
print(psm_table)